package com.mm.cloud.lease.dto.tenant.form;

import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import com.mm.cloud.lease.dto.tenant.form.item.TenantOtherDepositItemDTO;
import com.mm.cloud.lease.dto.tenant.form.item.TenantOtherFeeItemDTO;
import com.mm.cloud.lease.dto.tenant.form.item.TenantOtherInfoItemDTO;

/**
 * 租客登记 DTO
 */
/**
 * 租客登记 DTO
 * 包含租客基础信息、租期信息、计费与押金、以及可配置的附属信息（其他押金/其他付费/其他信息）。
 */
@Data
public class SaveTenantDTO implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /** 房源ID（租客入住所属房源） */
    private Long housingId;

    /** 房间ID（租客入住的具体房间） */
    private Long roomId;

    /** 租客性质：1-个人 2-企业 */
    private Byte tenantNature;

    /** 租客姓名 */
    private String tenantName;

    /** 租客证件类型（如：1-身份证，后续可扩展） */
    private Long tenantIdtype;

    /** 租客证件号码 */
    private String tenantIdcard;

    /** 租客电话号码 */
    private String tenantPhone;

    /** 租客性别：1-男 2-女 3-未知 */
    private Byte tenantSex;

    /** 租赁开始时间（含当日） */
    private LocalDateTime leaseStartTime;

    /** 租赁结束时间（可选，留空表示未定） */
    private LocalDateTime leaseEndTime;

    /** 租期-年（与月/日组合；用于按周期生成账单） */
    private Byte leaseYear;

    /** 租期-月 */
    private Byte leaseMonth;

    /** 租期-日 */
    private Byte leaseDay;

    /** 提前付租天数（到期前N天提醒/收租） */
    private Integer paymentAdvanceDay;

    /** 租金价格（每期） */
    private BigDecimal leasePrice;

    /** 缴费方式：1-月付 2-二月付 3-季付 6-半年付 12-年付 99-全额支付 */
    private Byte paymentMethod;

    /** 押金金额（房间押金） */
    private BigDecimal depositPrice;

    /** 渠道ID（来源渠道） */
    private Long channelId;

    /** 租客备注 */
    private String tenantRemark;

    /** 其他押金列表（按字典配置）：项含 dicId、depositPrice */
    private List<TenantOtherDepositItemDTO> otherDepositList;

    /** 其他付费列表（按字典配置）：项含 dicId、feePrice、feeMethod(1随房租/2一次性) */
    private List<TenantOtherFeeItemDTO> otherFeeList;

    /** 其他信息列表（按字典配置）：项含 dicId、infoContent */
    private List<TenantOtherInfoItemDTO> otherInfoList;
}


